#include<bits/stdc++.h>
using namespace std;
const int maxn=8e5+2;
const long long inf64=1e18;
int n;
int cnt;
int hed[maxn];
long long siz[maxn],psiz[maxn],va[maxn],sum[maxn],dep[maxn],la[maxn],lass[maxn];
bool vis[maxn];
long long all;
long long ans,len[maxn],tr[maxn];
bool cant[maxn*2];
struct node_edge{
    int nxt,to;
    long long val;
}G[maxn*2];
struct EDGE{
    int u,v,val;
}E[maxn];
vector<int>Ea[21];
void add(int u,int v,int w){
    G[++cnt]=(node_edge){hed[u],v,w};
    hed[u]=cnt;
    return ;
}
void dfs(int x,int f){
    vis[x]=1;
    siz[x]=1,dep[x]=dep[f]+1;
    for(int i=hed[x],v;i;i=G[i].nxt){
        v=G[i].to;
        if(v==f)continue;
        la[v]=i;
        dfs(v,x);
        siz[x]+=siz[v];
    }
    return ;
}
void calc(int x,int f,long long w,long long fsiz,long long pfsiz){
    vis[x]=1;
    all+=(siz[x]-psiz[x])*w;
    if(f){
        all+=fsiz*w;
        va[x]+=fsiz*siz[x]*w;
        va[x]+=(siz[x]-psiz[x])*pfsiz*w;
    }
    long long n1,n2;
    for(int i=hed[x],v;i;i=G[i].nxt){
        v=G[i].to;
        if(v==f)continue;
        n1=fsiz,n2=pfsiz;
        if(G[i].val==w)n1=n1+siz[x]-siz[v]+n2,n2=0;
        else n1=n1+siz[x]-psiz[x]-(siz[v]-psiz[v]),n2=n2+psiz[x]-psiz[v];
        calc(v,x,w,n1,n2);
    }
    return ;
}
queue<int>q;
void bfs(int S){
    for(int i=0;i<=n;i++)len[i]=inf64;
    int x;
    q.push(S);
    while(!q.empty()){
        x=q.front();
        q.pop();
        for(int i=hed[x],v;i;i=G[i].nxt){
            v=G[i].to;
            if(len[v]!=len[0]||cant[i])continue;
            len[v]=min(len[x],G[i].val);
            if(v<S)ans+=len[v];
            q.push(v);
        }
    }
    return ;
}
int main(){
    freopen("tatooine.in","r",stdin);
    freopen("tatooine.out","w",stdout);
    scanf("%d",&n);
    if(n<=500){
        int u,v,w;
        for(int i=1;i<n;i++){
            scanf("%d%d%d",&u,&v,&w);
            add(u,v,w);
            add(v,u,w);
        }
        ans=0;
        for(int i=1;i<=n;i++){
            bfs(i);
        }
        long long all=ans;
        for(int i=1;i<n;i++){
            cant[i*2-1]=cant[i*2]=1;
            ans=0;
            for(int j=1;j<=n;j++){
                bfs(j);
                // for(int k=1;k<=n;k++)printf("%lld ",len[k]);
                // printf("\n");
            }
            printf("%lld\n",ans);
            tr[i]=all-ans;
            cant[i*2-1]=cant[i*2]=0;
        }
    }
    else{
        for(int i=1;i<n;i++){
            scanf("%d%d%d",&E[i].u,&E[i].v,&E[i].val);
            Ea[E[i].val].push_back(i);
        }
        for(int i=1;i<=n;i++)psiz[i]=1;
        for(int i=20;i;i--){
            for(int j=0;j<Ea[i].size();j++){
                add(E[Ea[i][j]].u,E[Ea[i][j]].v,E[Ea[i][j]].val);
                add(E[Ea[i][j]].v,E[Ea[i][j]].u,E[Ea[i][j]].val);
            }
            for(int j=1;j<=n;j++)vis[j]=0;
            for(int j=1;j<=n;j++){
                if(!vis[j])dfs(j,0);
            }
            for(int j=1;j<=n;j++)vis[j]=0;
            for(int j=1;j<=n;j++){
                if(!vis[j])calc(j,0,i,0,0);
            }
            for(int j=1;j<=n;j++)psiz[j]=siz[j];
            // printf("now %d\n",i);
            // printf("siz:\n");
            // for(int j=1;j<=n;j++)printf("%lld ",siz[j]);
            // printf("\n");
            // printf("all=%lld\n",all);
        }
        all/=2;
        // printf("va:\n");
        // for(int i=1;i<=n;i++)printf("%lld ",va[i]);
        // printf("\n");
        // printf("all=%lld\n",all);
        int u,v;
        for(int i=1;i<n;i++){
            u=E[i].u,v=E[i].v;
            if(dep[u]<dep[v])swap(u,v);
            printf("%lld\n",all-va[u]);
        }
        // for(int i=1;i<n;i++)printf("%lld ",va[i]);
    }
    return 0;
}